package com.okaixz.manager.service.impl;

import com.okaixz.client.model.dto.TabsDto;
import com.okaixz.manager.domain.Tab;
import com.okaixz.manager.mapper.TabMapper;
import com.okaixz.manager.service.ITabService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 *  二级菜单管理Service业务层处理
 *
 * @author ruoyi
 * @date 2024-08-17
 */
@Service
public class TabServiceImpl implements ITabService
{
    @Autowired
    private TabMapper tabMapper;

    /**
     * 查询 二级菜单管理
     *
     * @param id  二级菜单管理主键
     * @return  二级菜单管理
     */
    @Override
    public Tab selectTabById(Long id)
    {
        return tabMapper.selectTabById(id);
    }

    /**
     * 查询 二级菜单管理列表
     *
     * @param tab  二级菜单管理
     * @return  二级菜单管理
     */
    @Override
    public List<Tab> selectTabList(Tab tab)
    {
        return tabMapper.selectTabList(tab);
    }
    /**
     * 查询 二级菜单管理列表
     *
     * @param tab  二级菜单管理
     * @return  二级菜单管理
     */
    @Override
    public List<TabsDto> selectTabListAll(Tab tab)
    {
        List<Tab> list = tabMapper.selectTabList(tab);
        if (list == null) {
            return null;
        }

        List<TabsDto> newList = list.stream().map(item->{
            TabsDto tabsDto=new TabsDto();
            BeanUtils.copyProperties(item,tabsDto);
            return tabsDto;
        }).collect(Collectors.toList());

        List<TabsDto> parentList = newList.stream()
                .filter(i -> i.getParentId() == 0)
                .collect(Collectors.toList());
        if (parentList == null) {
            return null;
        }
        Map<Long, TabsDto> parentMap = parentList.stream().collect(Collectors.toMap(TabsDto::getId, item -> item));
        newList.stream().filter(item -> item.getParentId() != 0).forEach(item -> {
            TabsDto parentTab = parentMap.get(item.getParentId());
            if (parentTab==null) {
                return;
            }
            List<TabsDto> childList = parentTab.getChildList();
            if (childList == null) {
                childList=new ArrayList<>();
                parentTab.setChildList(childList);
            }
            childList.add(item);
        });

        return parentList;
    }

    /**
     * 新增 二级菜单管理
     *
     * @param tab  二级菜单管理
     * @return 结果
     */
    @Override
    public int insertTab(Tab tab)
    {
        return tabMapper.insertTab(tab);
    }

    /**
     * 修改 二级菜单管理
     *
     * @param tab  二级菜单管理
     * @return 结果
     */
    @Override
    public int updateTab(Tab tab)
    {
        return tabMapper.updateTab(tab);
    }

    /**
     * 批量删除 二级菜单管理
     *
     * @param ids 需要删除的 二级菜单管理主键
     * @return 结果
     */
    @Override
    public int deleteTabByIds(Long[] ids)
    {
        return tabMapper.deleteTabByIds(ids);
    }

    /**
     * 删除 二级菜单管理信息
     *
     * @param id  二级菜单管理主键
     * @return 结果
     */
    @Override
    public int deleteTabById(Long id)
    {
        return tabMapper.deleteTabById(id);
    }
}
